#pragma once

#include <struct/query_context.hpp>

namespace blitz_query_cpp
{
    template <class... Processors>
    class processing_pipeline
    {
        template <class Current, class... Tail>
        void process_internal(query_context &context)
        {
            Current processor;
            processor.process(context);

            if constexpr (sizeof...(Tail) > 0)
                return process_internal<Tail...>(context);
        }

    public:
        void process(query_context &context)
        {
            process_internal<Processors...>(context);
        }
    };
}
